using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Decisions.HL7.Message;
using DecisionsFramework;

namespace Decisions.HL7.Message
{
    public class PurgeStatusCodeAttribute:RuleAttribute
    {
        private Dictionary<HL7Version, string[]> validVersionCodes = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, string[]> validVersionDescriptions = new Dictionary<HL7Version, string[]>();
        private Dictionary<HL7Version, HL7TableType> tableVersionTypes = new Dictionary<HL7Version, HL7TableType>();

        public PurgeStatusCodeAttribute()
        {
            // init the values for table version types
						tableVersionTypes[HL7Version.v23] = HL7TableType.User;
						tableVersionTypes[HL7Version.v231] = HL7TableType.User;
						tableVersionTypes[HL7Version.v24] = HL7TableType.User;
						tableVersionTypes[HL7Version.v25] = HL7TableType.User;
						tableVersionTypes[HL7Version.v251] = HL7TableType.User;
						tableVersionTypes[HL7Version.v26] = HL7TableType.User;
						tableVersionTypes[HL7Version.v27] = HL7TableType.User;
			
            
			// init the values for version codes
						validVersionCodes[HL7Version.v23] = new string[]{"D","I","P"};
						validVersionCodes[HL7Version.v231] = new string[]{"P","D","I"};
						validVersionCodes[HL7Version.v24] = new string[]{"P","D","I"};
						validVersionCodes[HL7Version.v25] = new string[]{"P","D","I"};
						validVersionCodes[HL7Version.v251] = new string[]{"P","D","I"};
						validVersionCodes[HL7Version.v26] = new string[]{"P","D","I"};
						validVersionCodes[HL7Version.v27] = new string[]{"P","D","I"};
			
			// init the values for version descriptions
						validVersionDescriptions[HL7Version.v23] = new string[]{"The visit is marked for deletion and the user cannot enter new data against it","The visit is marked inactive and the user cannot enter new data against it","Marked for purge.  User is no longer able to update the visit."};
						validVersionDescriptions[HL7Version.v231] = new string[]{"Marked for purge.  User is no longer able to update the visit.","The visit is marked for deletion and the user cannot enter new data against it.","The visit is marked inactive and the user cannot enter new data against it."};
						validVersionDescriptions[HL7Version.v24] = new string[]{"Marked for purge.  User is no longer able to update the visit.","The visit is marked for deletion and the user cannot enter new data against it.","The visit is marked inactive and the user cannot enter new data against it."};
						validVersionDescriptions[HL7Version.v25] = new string[]{"Marked for purge.  User is no longer able to update the visit.","The visit is marked for deletion and the user cannot enter new data against it.","The visit is marked inactive and the user cannot enter new data against it."};
						validVersionDescriptions[HL7Version.v251] = new string[]{"Marked for purge.  User is no longer able to update the visit.","The visit is marked for deletion and the user cannot enter new data against it.","The visit is marked inactive and the user cannot enter new data against it."};
						validVersionDescriptions[HL7Version.v26] = new string[]{"Marked for purge.  User is no longer able to update the visit.","The visit is marked for deletion and the user cannot enter new data against it.","The visit is marked inactive and the user cannot enter new data against it."};
						validVersionDescriptions[HL7Version.v27] = new string[]{"Marked for purge.  User is no longer able to update the visit.","The visit is marked for deletion and the user cannot enter new data against it.","The visit is marked inactive and the user cannot enter new data against it."};
			            

        }

        
        public override ValidationIssue[] RunRule(string name, object owningObject, object value)
        {
            //todo: check if the value is valid in the current version
            //if the value is not valid in the current version, add it as a validation issue


            return new ValidationIssue[0];
        }
    }
}
